#include <stdio.h>

int main()
{   
    // define 不是关键字
    int define = 10;
    int include = 20;
    printf(" define = %d \n",define);
    printf(" include = %d \n",include);
    char ch = 'w';
    // 指针类型的区分
    char *pc = &ch;
    printf(" &ch = %p \n",pc);
    printf(" &ch sizeof = %d \n",sizeof(pc));

    // 二级字符指针的数组 ？
    char **arr3[4];

    // 数组指针 -  实际上是个指针 - 指向数组的指针 - 存放数组的地址
    int arr[10] = {0};
    // arr - 是首元素的地址
    // &arr[0] - 是首元素的地址
    // &arr - 数组的地址

    int ar[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int(*p)[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    // *p 表示数组指针，替代ar。[10]表示指向的数组有10个元素，是int类型的
    printf("p = %d \n", p[3]);
    printf("c = %c \n", *p);

    char *arc[5];
    char *(*pa)[5] = &arc; // 最终指向一个地址

    // 用法
    int(*pb)[10] = &ar;
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", (*pb)[i]);
    }
    printf("\n");
    
    return 0;
}

// 指针大小在32位平台是4字节，64位平台是8个字节

// int main()
// {   
//     int a = 10;
//     // &a; //取地址
//     printf(" &a = %p\n",&a); // 打印地址
//     printf("&b = %p\n",&a); // 打印地址
//     // 有一种变量是用来存放地址的 - 指针变量,把a的地址存到指针p
//     int* p = &a;
//     printf(" p = %p \n",p);
//     // *p *是解引用操作符，*p相当于取地址p上存的值a
//     printf(" pasfd = %p \n",p);
//     printf(" *p = %d \n",*p);
//     *p = 20;
//     printf(" *p = %d \n",*p);
//     printf(" p = %p \n",p);
//     printf(" *a = %p \n",&a);
//     return 0;
// }
